firmware, qemu: Change ACPI IO values to match QEMU BIOS
authorAnthony Perard <anthony.perard@citrix.com>
Tue, 9 Nov 2010 18:03:55 +0000 (18:03 +0000)
committerAnthony Perard <anthony.perard@citrix.com>
Tue, 9 Nov 2010 18:03:55 +0000 (18:03 +0000)
As part of the QEMU/Xen merge, this patch comes to change the value of
sleep states and add some information in the PCI registers to match the
implementation of the BIOS of QEMU.

It also does a hypercall (HVM_PARAM_ACPI_IOPORTS_LOCATION) that tell the
Xen to use the new Port I/O instead of the old one.

[ Also, in this patch, update QEMU_TAG to the qemu-xen revision
  with the corresponding qemu change. -iwj ]

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Config.mk
tools/firmware/hvmloader/acpi/dsdt.asl
tools/firmware/hvmloader/hvmloader.c

index da7406e0a58288280a290b0eee6c0959cd1786ae..f47a3ac2664a6a0b0d84384f89731eabd5be8e6b 100644 (file)
--- a/Config.mk
+++ b/Config.mk
@@ -185,9 +185,9 @@ endif
 # CONFIG_QEMU ?= ../qemu-xen.git
 CONFIG_QEMU ?= $(QEMU_REMOTE)
 
-QEMU_TAG ?= 0442ec23f9efc4f8f9259351f612194f8f42900c
-# Mon Nov 8 17:09:54 2010 +0000
-# stubdom: fix handing of dependency files
+QEMU_TAG ?= ce3b7ce68426ea6249bb411f26b376d459c45450
+# Tue Nov 9 18:01:13 2010 +0000
+# piix4acpi, xen: change in ACPI to match the change in the BIOS.
 
 # Optional components
 XENSTAT_XENTOP     ?= y
index 03799d3b4845a46fd831fad6656987352f0b6c03..ea8e324ddb63f8f298d74fad3f5ccdacf6c8335d 100644 (file)
@@ -33,22 +33,22 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "Xen", "HVM", 0)
      */
     Name (\_S3, Package (0x04)
     {
-        0x05,  /* PM1a_CNT.SLP_TYP */
-        0x05,  /* PM1b_CNT.SLP_TYP */
+        0x01,  /* PM1a_CNT.SLP_TYP */
+        0x01,  /* PM1b_CNT.SLP_TYP */
         0x0,   /* reserved */
         0x0    /* reserved */
     })
     Name (\_S4, Package (0x04)
     {
-        0x06,  /* PM1a_CNT.SLP_TYP */
-        0x06,  /* PM1b_CNT.SLP_TYP */
+        0x00,  /* PM1a_CNT.SLP_TYP */
+        0x00,  /* PM1b_CNT.SLP_TYP */
         0x00,  /* reserved */
         0x00   /* reserved */
     })
     Name (\_S5, Package (0x04)
     {
-        0x07,  /* PM1a_CNT.SLP_TYP */
-        0x07,  /* PM1b_CNT.SLP_TYP */
+        0x00,  /* PM1a_CNT.SLP_TYP */
+        0x00,  /* PM1b_CNT.SLP_TYP */
         0x00,  /* reserved */
         0x00   /* reserved */
     })
index 6bc493a4a2cde3e930e7fc948f28634815993429..11c78ba1d651baf797f00c8fcf91143ad7f2981c 100644 (file)
@@ -31,6 +31,7 @@
 #include "option_rom.h"
 #include <xen/version.h>
 #include <xen/hvm/params.h>
+#include <xen/hvm/ioreq.h>
 #include <xen/memory.h>
 
 asm (
@@ -222,9 +223,12 @@ static void pci_setup(void)
             /* PIIX4 ACPI PM. Special device with special PCI config space. */
             ASSERT((vendor_id == 0x8086) && (device_id == 0x7113));
             pci_writew(devfn, 0x20, 0x0000); /* No smb bus IO enable */
+            pci_writew(devfn, 0xd2, 0x0000); /* No smb bus IO enable */
             pci_writew(devfn, 0x22, 0x0000);
             pci_writew(devfn, 0x3c, 0x0009); /* Hardcoded IRQ9 */
             pci_writew(devfn, 0x3d, 0x0001);
+            pci_writel(devfn, 0x40, ACPI_PM1A_EVT_BLK_ADDRESS | 1);
+            pci_writeb(devfn, 0x80, 0x01); /* enable PM io space */
             break;
         case 0x0101:
             if ( vendor_id == 0x8086 )
@@ -763,8 +767,15 @@ int main(void)
 
     if ( hvm_info->acpi_enabled )
     {
+        struct xen_hvm_param p = {
+            .domid = DOMID_SELF,
+            .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
+            .value = 1,
+        };
+
         printf("Loading ACPI ...\n");
         acpi_build_tables();
+        hypercall_hvm_op(HVMOP_set_param, &p);
     }
 
     init_vm86_tss();